// 引入showModal
import {showModal, showToast, navigateTo} from '../../request/index'
//Page Object
Page({
    data: {
        // 接收缓存中获取的地址
        address: {},
        cart: [],
        allChecked: false,
        totalPrice: 0,
        totalNum: 0
    },

    //options(Object)
    onLoad: function(options){
        
    },
    onReady: function(){
        
    },
    onShow: function(){
        // 从缓存中取出地址，并赋给address
        const address = wx.getStorageSync('address');
        // 从缓存中取出cart(注意cart为空的情况)
        const cart = wx.getStorageSync('cart') || [];
        // 修改底部工具栏状态
        this.setCart(cart);
        this.setData({address});
    },

    onHide: function(){

    },
    onUnload: function(){

    },
    onPullDownRefresh: function(){

    },
    onReachBottom: function(){

    },
    onShareAppMessage: function(){

    },
    onPageScroll: function(){

    },
    //item(index,pagePath,text)
    onTabItemTap:function(item){

    },

    // 封装：修改底部工具栏数据和状态(全选、总价、数量)
    setCart(cart) {
        // 修改底部工具栏各项的状态
        let allChecked = true;
        let totalPrice = 0;
        let totalNum = 0;
        // 计算对被选中商品的总价和数量、全选状态
        cart.forEach(v => {
            if(v.checked){
                totalPrice += v.num * v.goods_price;
                totalNum += v.num;
            }else{
                allChecked = false;
            }
        })
        // 判断数组是否为空，如果为空，allChecked应为false
        allChecked = cart.length ? allChecked : false;
        // 将修改后的数据重新放回data和缓存中
        this.setData({
            cart,
            totalPrice,
            totalNum,
            allChecked
        })
        wx.setStorageSync('cart', cart);
    },

    // 全选/反选
    handleAllChange() {
        let {cart, allChecked} = this.data;    
        allChecked = !allChecked;    
        cart.forEach(v => v.checked=allChecked);
        this.setCart(cart);              
    },

    // 获取用户的收货地址，并放入缓存中
    async handleChooseAddress() {
        try{
            let address = await wx.chooseAddress();
            // 将获取的地址拼接成字符串，再同时放进缓存中
            address.all = address.provinceName+address.cityName+address.countyName+address.detailInfo;
            wx.setStorageSync('address', address);
        }catch(e){
            console.log(e);
        }
    },

    // 商品的选中
    handleItemChange(e) {
        const goods_id = e.currentTarget.dataset.id;
        let {cart} = this.data;
        const index = cart.findIndex(v => v.goods_id===goods_id);
        // 对被选中商品的checked取反
        cart[index].checked = !cart[index].checked;
        // 修改底部工具栏状态
        this.setCart(cart);
    },

    // 商品数量的编辑功能(操作符opration标记加或减，1为增加，-1为减少)
    async handleItemNumEdit(e) {
        try{
            // 获取传递过来的参数
            const {id, opration} = e.currentTarget.dataset;
            let {cart} = this.data;
            const index = cart.findIndex(v => v.goods_id===id); 
            // 判断是否执行删除操作：
            // 当num=1，同时点击减按钮，弹出对话框，询问用户是否删除该产品
            // 如果选确定，则当前产品的数据从缓存和data中清空；
            // 如果选取消，则什么都不做
            if(cart[index].num===1 && opration===-1){   
                const res = await showModal({content:'您是否要删除？'});
                if(res.confirm){
                    cart.splice(index, 1);
                    this.setCart(cart);
                }
            }else{
                // 点击增加按钮时，opration值为1，则数量会加1；点击减少按钮时，option值为-1，则数量会减1
                cart[index].num += opration;
                this.setCart(cart);
            }          
        }catch(e){
            console.log(e);
        }
    },

    // 结算按钮功能
    async handlePay() {
        const {address, totalNum} = this.data;
        try{
            if(totalNum===0){
                await showToast({title:'您还没有选购商品！'});
                return;
            }
            if(!address.userName){
                await showToast({title:'您还没有添加收货地址！'});
                return;
            }
            await navigateTo({url: '/pages/pay/pay'});
        }catch(e){
            console.log(e);
        }
    },
});